package vue.panneau3;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;

import vue.panneau3.panneau3Controleur.EtapePrecedenteSuivanteListener;
import vue.util.Point;


class ChoixPointPopupMenu extends JPopupMenu {
     /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
		public ChoixPointPopupMenu (final Representation2D r2D,final Point pointCorrespondant, final List<EtapePrecedenteSuivanteListener> listeDesEcouteurPourPassageEtatPrecedantSuivant) {
			super() ;
			JMenuItem mi3 = new JMenuItem("changer le nom") ;
			JMenuItem mi5 = new JMenuItem("taille des croix",vue.panneau3.util.Util.createImageIcon("img/croix.png")) ;
			JMenuItem mi6 = new JMenuItem("   passer a l'etape suivante",vue.panneau3.util.Util.createImageIcon("img/suivant.png")) ;
			JMenuItem mi7 = new JMenuItem("   passer a l'etape précédente",vue.panneau3.util.Util.createImageIcon("img/precedant.png")) ;
			
			
			this.add(mi3) ;
			this.add(mi5) ;
			
			
			
			
			
			// taille des croix
			mi5.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					 Object[] possibleValues = { "0.1", "0.5", "1", "2", "5", "10", "15" , "20", "50"};
					 Object selectedValue = JOptionPane.showInputDialog(null,

					             "choisir la taille", "taille des croix",

					             JOptionPane.INFORMATION_MESSAGE, null,

					             possibleValues, possibleValues[0]);
					
					 if (selectedValue!=null){
						 r2D.setTailleCroix(new Float((String) selectedValue)) ;				
						 r2D.repaint() ;
					 }
				}}) ;
			// le nom du point
			mi3.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					
					 String st1 = "par defaut" ;
					 String st2 = "personnalise" ;
					 
					 Object[] possibleValues = { st1,st2};
					 Object selectedValue = JOptionPane.showInputDialog(null,

					             "personnaliser le texte du point", "texte du point",

					             JOptionPane.INFORMATION_MESSAGE, null,

					             possibleValues, possibleValues[0]);
					
					 if (selectedValue==null)
						 return ;
					 if (selectedValue==st1) {
						 pointCorrespondant.settext(null) ;
						 return ;
					 }
					 System.out.println("personnalise");
					 // texte personnalise:
					 final JFrame jop = new JFrame("renommer le noeud") ;
					 jop.setAlwaysOnTop(true) ;
					 jop.getContentPane().setLayout(new BorderLayout()) ;
					 final JTextField jtf = new JTextField(pointCorrespondant.toString()) ;
					 JButton valid = new JButton("valider") ;
					 JButton annul = new JButton("annuler") ;
					 jop.getContentPane().add(jtf,BorderLayout.NORTH) ;
					 JPanel jpCentre = new JPanel(new FlowLayout()) ;
					 jpCentre.add(valid) ;
					 jpCentre.add(annul) ;
					 jop.getContentPane().add(jpCentre,BorderLayout.CENTER) ;
					 jop.setSize(300, 100) ;
					 jop.setLocationRelativeTo(jop.getParent());
					 jop.setVisible(true) ;
					 
					 annul.addActionListener(new ActionListener() {

							public void actionPerformed(ActionEvent arg0) {
								jop.dispose() ;
								
							}}) ;
					 valid.addActionListener(new ActionListener() {

							public void actionPerformed(ActionEvent arg0) {
								pointCorrespondant.settext(jtf.getText()) ;
								jop.dispose() ;
								
							}}) ;
					 
				}}) ;
			
			
			// etat precedant
			mi6.addActionListener(new ActionListener() {

				public void actionPerformed(ActionEvent arg0) {
					for (EtapePrecedenteSuivanteListener listener : listeDesEcouteurPourPassageEtatPrecedantSuivant) {
						listener.selectionnerEtapeSuivante() ;
					}
				}}) ;

			// etat suivant
			mi7.addActionListener(new ActionListener() {

				public void actionPerformed(ActionEvent arg0) {
					for (EtapePrecedenteSuivanteListener listener : listeDesEcouteurPourPassageEtatPrecedantSuivant) {
						listener.selectionnerEtapePrecedente() ;
					}
				}}) ;

		}
	
	
	
	
		public void show(Component invoker, int x, int y) {
                /**Dimension de l'�cran */
                Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                /** Dimension du Menu popup */
                Dimension popupSize = this.getPreferredSize();
                /** Position en x,y du popup � l'�cran (pour le .show) */
                double xPopupEcran = invoker.getLocationOnScreen().getX() + x;
                double yPopupEcran = invoker.getLocationOnScreen().getY() + y;
                
                /** Si le popup d�borde de l'�cran sur la droite on d�cale sur x */
                if ((xPopupEcran + popupSize.getWidth()) > screenSize.getWidth()) {
                        x = x - (int)popupSize.getWidth();
                } 
                
                /** Si le popup d�borde de l'�cran sur le bas on d�cale sur y */
                if ((yPopupEcran + popupSize.getHeight()) > screenSize.getHeight()) {
                        y = y - (int)popupSize.getHeight();
                } 
                
                /** On affiche le popup � l'endroit judicieusement calcul� :) */
                super.show(invoker, x, y);
                
        } 
}